package com.data.center.controller;

import com.data.center.util.DateTimeUtils;
import com.data.center.util.ExcelToListUtils;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;


@Slf4j
@SpringBootTest
class AdminDivisionControllerTestDS {

    @Autowired
    AdminDivisionController adminDivisionController;

    private List<String> codeList;
    List<String> nameList;

    private void codeList() {
        codeList = new ArrayList<>();
        nameList = new ArrayList<>();

        // 数据导入开始
        codeList.add("610000");
        nameList.add("陕西省");

        codeList.add("610100");
        nameList.add("西安市");

        codeList.add("610102");
        nameList.add("新城区");

        codeList.add("610103");
        nameList.add("碑林区");

        codeList.add("610104");
        nameList.add("莲湖区");

        codeList.add("610111");
        nameList.add("灞桥区");

        codeList.add("610112");
        nameList.add("未央区");

        codeList.add("610113");
        nameList.add("雁塔区");

        codeList.add("610114");
        nameList.add("阎良区");

        codeList.add("610115");
        nameList.add("临潼区");

        codeList.add("610116");
        nameList.add("长安区");

        codeList.add("610117");
        nameList.add("高陵区");

        codeList.add("610122");
        nameList.add("蓝田县");

        codeList.add("610124");
        nameList.add("周至县");

        codeList.add("610125");
        nameList.add("户县");

        codeList.add("610200");
        nameList.add("铜川市");

        codeList.add("610202");
        nameList.add("王益区");

        codeList.add("610203");
        nameList.add("印台区");

        codeList.add("610204");
        nameList.add("耀州区");

        codeList.add("610222");
        nameList.add("宜君县");

        codeList.add("610300");
        nameList.add("宝鸡市");

        codeList.add("610302");
        nameList.add("渭滨区");

        codeList.add("610303");
        nameList.add("金台区");

        codeList.add("610304");
        nameList.add("陈仓区");

        codeList.add("610322");
        nameList.add("凤翔县");

        codeList.add("610323");
        nameList.add("岐山县");

        codeList.add("610324");
        nameList.add("扶风县");

        codeList.add("610326");
        nameList.add("眉县");

        codeList.add("610327");
        nameList.add("陇县");

        codeList.add("610328");
        nameList.add("千阳县");

        codeList.add("610329");
        nameList.add("麟游县");

        codeList.add("610330");
        nameList.add("凤县");

        codeList.add("610331");
        nameList.add("太白县");

        codeList.add("610400");
        nameList.add("咸阳市");

        codeList.add("610402");
        nameList.add("秦都区");

        codeList.add("610403");
        nameList.add("杨陵区");

        codeList.add("610404");
        nameList.add("渭城区");

        codeList.add("610422");
        nameList.add("三原县");

        codeList.add("610423");
        nameList.add("泾阳县");

        codeList.add("610424");
        nameList.add("乾县");

        codeList.add("610425");
        nameList.add("礼泉县");

        codeList.add("610426");
        nameList.add("永寿县");

        codeList.add("610427");
        nameList.add("彬县");

        codeList.add("610428");
        nameList.add("长武县");

        codeList.add("610429");
        nameList.add("旬邑县");

        codeList.add("610430");
        nameList.add("淳化县");

        codeList.add("610431");
        nameList.add("武功县");

        codeList.add("610481");
        nameList.add("兴平市");

        codeList.add("610500");
        nameList.add("渭南市");

        codeList.add("610502");
        nameList.add("临渭区");

        codeList.add("610503");
        nameList.add("华州区");

        codeList.add("610522");
        nameList.add("潼关县");

        codeList.add("610523");
        nameList.add("大荔县");

        codeList.add("610524");
        nameList.add("合阳县");

        codeList.add("610525");
        nameList.add("澄城县");

        codeList.add("610526");
        nameList.add("蒲城县");

        codeList.add("610527");
        nameList.add("白水县");

        codeList.add("610528");
        nameList.add("富平县");

        codeList.add("610581");
        nameList.add("韩城市");

        codeList.add("610582");
        nameList.add("华阴市");

        codeList.add("610600");
        nameList.add("延安市");

        codeList.add("610602");
        nameList.add("宝塔区");

        codeList.add("610621");
        nameList.add("延长县");

        codeList.add("610622");
        nameList.add("延川县");

        codeList.add("610623");
        nameList.add("子长县");

        codeList.add("610624");
        nameList.add("安塞县");

        codeList.add("610625");
        nameList.add("志丹县");

        codeList.add("610626");
        nameList.add("吴起县");

        codeList.add("610627");
        nameList.add("甘泉县");

        codeList.add("610628");
        nameList.add("富县");

        codeList.add("610629");
        nameList.add("洛川县");

        codeList.add("610630");
        nameList.add("宜川县");

        codeList.add("610631");
        nameList.add("黄龙县");

        codeList.add("610632");
        nameList.add("黄陵县");

        codeList.add("610700");
        nameList.add("汉中市");

        codeList.add("610702");
        nameList.add("汉台区");

        codeList.add("610721");
        nameList.add("南郑县");

        codeList.add("610722");
        nameList.add("城固县");

        codeList.add("610723");
        nameList.add("洋县");

        codeList.add("610724");
        nameList.add("西乡县");

        codeList.add("610725");
        nameList.add("勉县");

        codeList.add("610726");
        nameList.add("宁强县");

        codeList.add("610727");
        nameList.add("略阳县");

        codeList.add("610728");
        nameList.add("镇巴县");

        codeList.add("610729");
        nameList.add("留坝县");

        codeList.add("610730");
        nameList.add("佛坪县");

        codeList.add("610800");
        nameList.add("榆林市");

        codeList.add("610802");
        nameList.add("榆阳区");

        codeList.add("610803");
        nameList.add("横山区");

        codeList.add("610821");
        nameList.add("神木县");

        codeList.add("610822");
        nameList.add("府谷县");

        codeList.add("610824");
        nameList.add("靖边县");

        codeList.add("610825");
        nameList.add("定边县");

        codeList.add("610826");
        nameList.add("绥德县");

        codeList.add("610827");
        nameList.add("米脂县");

        codeList.add("610828");
        nameList.add("佳县");

        codeList.add("610829");
        nameList.add("吴堡县");

        codeList.add("610830");
        nameList.add("清涧县");

        codeList.add("610831");
        nameList.add("子洲县");

        codeList.add("610900");
        nameList.add("安康市");

        codeList.add("610902");
        nameList.add("汉滨区");

        codeList.add("610921");
        nameList.add("汉阴县");

        codeList.add("610922");
        nameList.add("石泉县");

        codeList.add("610923");
        nameList.add("宁陕县");

        codeList.add("610924");
        nameList.add("紫阳县");

        codeList.add("610925");
        nameList.add("岚皋县");

        codeList.add("610926");
        nameList.add("平利县");

        codeList.add("610927");
        nameList.add("镇坪县");

        codeList.add("610928");
        nameList.add("旬阳县");

        codeList.add("610929");
        nameList.add("白河县");

        codeList.add("611000");
        nameList.add("商洛市");

        codeList.add("611002");
        nameList.add("商州区");

        codeList.add("611021");
        nameList.add("洛南县");

        codeList.add("611022");
        nameList.add("丹凤县");

        codeList.add("611023");
        nameList.add("商南县");

        codeList.add("611024");
        nameList.add("山阳县");

        codeList.add("611025");
        nameList.add("镇安县");

        codeList.add("611026");
        nameList.add("柞水县");
    }

    @Test
    void fullUpdate() {

        codeList();
        adminDivisionController.fullUpdate(codeList, nameList);
    }

    @Test
    void fullUpdate2() {

        codeList();
        adminDivisionController.fullUpdate(codeList, nameList);
    }

    @Test
    void fullUpdate3() {

        codeList();

        // 测试附加方式更新
        codeList.add("611040");
        nameList.add("测试县");

        adminDivisionController.fullUpdate(codeList, nameList);
    }

    @Test
    void fullUpdate4() {

        codeList();

        // 测试失效方式更新
        codeList.remove(0);
        nameList.remove(0);

        adminDivisionController.fullUpdate(codeList, nameList);
    }

    @Test
    void getByName() {
        // 测试导入数据的所有区域是否可以准确查询
        List<String> stringList = ExcelToListUtils.excelColToList(
                "C:\\Users\\zjjxt\\Desktop\\科协\\workspace\\data-center\\source\\OrgImportData\\Affiliation-Universities-ANSI.xlsx",
                "Affiliation-Universities-ANSI",
                30);
        // 删除前两个错误数据
        stringList = stringList.subList(2, stringList.size());

        // 检查并输出错误数据
        List<String> wrong = new ArrayList<>();
        stringList.forEach(item -> {
            try {
                adminDivisionController.getEffectAdminDivisionByName(item);
            } catch (Exception e) {
                log.info(e.getMessage());
                wrong.add(item);
            }
        });

        List<String> wrongData = new ArrayList<>();
        wrong.forEach(i -> {
            try {
                adminDivisionController.searchByName(i);
            } catch (Exception e) {
                log.info(e.getMessage());
                wrongData.add(i);
            }
        });

        log.info("无法查询到唯一" + wrong);
        log.info("不存在" + wrongData);
    }

    @Test
    void searchByName() {

    }

    /**
     * @Description: 可重复实现数据导入的测试入口
     * **/
    @Test
    void importData() throws ParseException {
        // 需要首先将下述几个根数据插入表中
//        00000000	无	0		1	2023-09-12
//        1151144038737514498	01000000	西部	0		1	2023-09-12
//        1151144038737514499	02000000	港澳台	0		1	2023-09-12
//        115114403873751500	03000000	东部	0		1	2023-09-12
//        115114403873751501	04000000	中部	0		1	2023-09-12
//        115114403873751502	05000000	东北	0		1	2023-09-12
        importData2015();
        importData2016();
        importData2017();
        importData2018();
        importData2019();
        importData2020(); // 数据导入错误，全部失效，原因为存在两个没有区域编码的数据
        importData2021();
    }

    @Test
    void importData2015() throws ParseException {
        List<String> codeList = ExcelToListUtils.excelColToList(
                "C:\\Users\\zjjxt\\Desktop\\科协\\workspace\\data-center\\source\\AdminDivision\\年度国标行政区划编码\\2015年行政区划.xlsx",
                "Sheet1",
                0);

        List<String> nameList = ExcelToListUtils.excelColToList(
                "C:\\Users\\zjjxt\\Desktop\\科协\\workspace\\data-center\\source\\AdminDivision\\年度国标行政区划编码\\2015年行政区划.xlsx",
                "Sheet1",
                1);

        Date date = DateTimeUtils.parseDateTime("2015-01-01", "yyyy-mm-dd");
        adminDivisionController.fullUpdateWithTime(codeList, nameList, date);
    }

    @Test
    void importData2016() throws ParseException {
        List<String> codeList = ExcelToListUtils.excelColToList(
                "C:\\Users\\zjjxt\\Desktop\\科协\\workspace\\data-center\\source\\AdminDivision\\年度国标行政区划编码\\2016年行政区划.xlsx",
                "Sheet1",
                0);

        List<String> nameList = ExcelToListUtils.excelColToList(
                "C:\\Users\\zjjxt\\Desktop\\科协\\workspace\\data-center\\source\\AdminDivision\\年度国标行政区划编码\\2016年行政区划.xlsx",
                "Sheet1",
                1);

        Date date = DateTimeUtils.parseDateTime("2016-01-01", "yyyy-mm-dd");
        adminDivisionController.fullUpdateWithTime(codeList, nameList, date);

    }


    @Test
    void importData2017() throws ParseException {
        List<String> codeList = ExcelToListUtils.excelColToList(
                "C:\\Users\\zjjxt\\Desktop\\科协\\workspace\\data-center\\source\\AdminDivision\\年度国标行政区划编码\\2017年行政区划.xlsx",
                "Sheet1",
                0);

        List<String> nameList = ExcelToListUtils.excelColToList(
                "C:\\Users\\zjjxt\\Desktop\\科协\\workspace\\data-center\\source\\AdminDivision\\年度国标行政区划编码\\2017年行政区划.xlsx",
                "Sheet1",
                1);

        Date date = DateTimeUtils.parseDateTime("2017-01-01", "yyyy-mm-dd");
        adminDivisionController.fullUpdateWithTime(codeList, nameList, date);

    }


    @Test
    void importData2018() throws ParseException {
        List<String> codeList = ExcelToListUtils.excelColToList(
                "C:\\Users\\zjjxt\\Desktop\\科协\\workspace\\data-center\\source\\AdminDivision\\年度国标行政区划编码\\2018年行政区划.xlsx",
                "Sheet1",
                0);

        List<String> nameList = ExcelToListUtils.excelColToList(
                "C:\\Users\\zjjxt\\Desktop\\科协\\workspace\\data-center\\source\\AdminDivision\\年度国标行政区划编码\\2018年行政区划.xlsx",
                "Sheet1",
                1);

        Date date = DateTimeUtils.parseDateTime("2018-01-01", "yyyy-mm-dd");
        adminDivisionController.fullUpdateWithTime(codeList, nameList, date);

    }


    @Test
    void importData2019() throws ParseException {
        List<String> codeList = ExcelToListUtils.excelColToList(
                "C:\\Users\\zjjxt\\Desktop\\科协\\workspace\\data-center\\source\\AdminDivision\\年度国标行政区划编码\\2019年行政区划.xlsx",
                "Sheet1",
                0);

        List<String> nameList = ExcelToListUtils.excelColToList(
                "C:\\Users\\zjjxt\\Desktop\\科协\\workspace\\data-center\\source\\AdminDivision\\年度国标行政区划编码\\2019年行政区划.xlsx",
                "Sheet1",
                1);

        Date date = DateTimeUtils.parseDateTime("2019-01-01", "yyyy-mm-dd");
        adminDivisionController.fullUpdateWithTime(codeList, nameList, date);

    }

    @Test
    void importData2020() throws ParseException {
        // 2022年数据有
        // 西沙区
        // 南沙区
        // 两个无编号数据
        List<String> codeList = ExcelToListUtils.excelColToList(
                "C:\\Users\\zjjxt\\Desktop\\科协\\workspace\\data-center\\source\\AdminDivision\\年度国标行政区划编码\\2020年行政区划.xlsx",
                "Sheet1",
                0);

        List<String> nameList = ExcelToListUtils.excelColToList(
                "C:\\Users\\zjjxt\\Desktop\\科协\\workspace\\data-center\\source\\AdminDivision\\年度国标行政区划编码\\2020年行政区划.xlsx",
                "Sheet1",
                1);

        Date date = DateTimeUtils.parseDateTime("2020-01-01", "yyyy-mm-dd");
        adminDivisionController.fullUpdateWithTime(codeList, nameList, date);

    }

    @Test
    void importData2021() throws ParseException {
        List<String> codeList = ExcelToListUtils.excelColToList(
                "C:\\Users\\zjjxt\\Desktop\\科协\\workspace\\data-center\\source\\AdminDivision\\年度国标行政区划编码\\2021年行政区划.xlsx",
                "Sheet1",
                0);

        List<String> nameList = ExcelToListUtils.excelColToList(
                "C:\\Users\\zjjxt\\Desktop\\科协\\workspace\\data-center\\source\\AdminDivision\\年度国标行政区划编码\\2021年行政区划.xlsx",
                "Sheet1",
                1);

//        Date date = DateTimeUtils.parseDateTime("2015-01-01", "yyyy-mm-dd");
        adminDivisionController.fullUpdate(codeList, nameList);

    }
}